﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ExaminationTT.Model
{

    public interface IStudent
    {
        int Number { get; }
        string Name { get; }
        IEnumerable<ISubscription> Subscriptions { get; }
    }
    public interface ISemester
    {
        int ID { get; }
        int Number { get; }
        string Description { get; }
        IEnumerable<ICUSemester> CUnits { get; }
    }

    public interface ICUSemester
    {

        ICUnit CUnit { get; }
        ISemester Semester { get; }
    }

    public interface ICUnit
    {
        int ID { get; }
        string Acronym { get; }
        string Name { get; }
        IEnumerable<ICUSemester> Semesters { get; }
        IEnumerable<ICourseCU> Courses { get; }
        IEnumerable<ISubscription> Subscriptions { get; }
    }

    public interface ISubscription
    {
        IStudent Student { get; }
        ICUnit CUnit { get; }
    }
    //public interface ISubscriptionKey
    //{
    //    int StudentKey { get; }
    //    int CUnitKey { get; }
    //}
    public interface ICourse
    {
        string Acronym { get; }
        string Name { get; }
        IEnumerable<ICourseCU> CUints { get; }
    }
    public interface IRegime
    {
        string Description { get; }
        IEnumerable<IClass> Classes { get; }
    }

    public interface ICourseCU
    { 
        ICourse Course { get; }
        ICUnit CUnit { get; }
    }
    public interface IClass
    {
        string Name { get; }
        IRegime Regime { get; }
        ICourse Course { get; }
        IEnumerable<ITeacherClassCUnit> TeachersCunits { get; }
        
    }
    public interface ITeacher
    {
        string Name { get; }
        IEnumerable<ITeacherClassCUnit> ClassCUnit { get; }
    }
    public interface IRoom
    {
        string Description { get; }
        int Seats { get; }
        
    }
    public interface IExam
    {
        ICUnit CUnit { get; }
        IEnumerable<IRoomExam> Rooms { get; }
        DateTime ExamDate { get; set; }
        DateTime ExamEndDate { get; set; }
        IExamSeason Season {get;}
        bool Scheduled { get; set; }
        //bool AddRoom(IRoom room);
        //bool RemoveRoom(IRoom room);

    }

    public interface ITeacherClassCUnit
    {
        ITeacher Teacher { get; }
        IClass Class { get; }
        ICUnit CUnit { get; }
    }

    public interface IRoomExam
    {
        IRoom Room { get; }
        IExam Exam { get; }
    }
    public interface IExamSeason
    {
        String Description { get; }
        DateTime StartSeason { get; }
        DateTime EndSeason { get;  }
    }
}
